home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / tbl_properties_structure.php < prev    next >
PHP Script  |  2005-04-26  |  39KB  |  877 lines

  1. <?php
  2. /* $Id: tbl_properties_structure.php,v 2.35.2.1 2005/04/26 16:00:57 lem9 Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. require_once('./libraries/grab_globals.lib.php');
  6. require_once('./libraries/common.lib.php');
  7. require_once('./libraries/mysql_charsets.lib.php');
  8.  
  9. /**
  10.  * Drop multiple fields if required
  11.  */
  12.  
  13. // workaround for IE problem:
  14. if (isset($submit_mult_change_x)) {
  15.     $submit_mult = $strChange;
  16. } elseif (isset($submit_mult_drop_x)) {
  17.     $submit_mult = $strDrop;
  18. } elseif (isset($submit_mult_primary_x)) {
  19.     $submit_mult = $strPrimary;
  20. } elseif (isset($submit_mult_index_x)) {
  21.     $submit_mult = $strIndex;
  22. } elseif (isset($submit_mult_unique_x)) {
  23.     $submit_mult = $strUnique;
  24. } elseif (isset($submit_mult_fulltext_x)) {
  25.     $submit_mult = $strIdxFulltext;
  26. }
  27.  
  28. if ((!empty($submit_mult) && isset($selected_fld))
  29.     || isset($mult_btn)) {
  30.     $action = 'tbl_properties_structure.php';
  31.     $err_url = 'tbl_properties_structure.php?' . PMA_generate_common_url($db, $table);
  32.     require('./mult_submits.inc.php');
  33. }
  34.  
  35. /**
  36.  * Runs common work
  37.  */
  38. require('./tbl_properties_common.php');
  39. $url_query .= '&goto=tbl_properties_structure.php&back=tbl_properties_structure.php';
  40.  
  41. /**
  42.  * Prepares the table structure display
  43.  */
  44.  
  45. /**
  46.  * Gets tables informations
  47.  */
  48. require('./tbl_properties_table_info.php');
  49.  
  50. /**
  51.  * Show result of multi submit operation
  52.  */
  53. if ((!empty($submit_mult) && isset($selected_fld))
  54.     || isset($mult_btn)) {
  55.     $message = $strSuccess;
  56. }
  57.  
  58. /**
  59.  * Displays top menu links
  60.  */
  61. require('./tbl_properties_links.php');
  62.  
  63. // 2. Gets table keys and retains them
  64. $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  65. $primary     = '';
  66. $ret_keys    = array();
  67. $pk_array    = array(); // will be use to emphasis prim. keys in the table view
  68. while ($row = PMA_DBI_fetch_assoc($result)) {
  69.     $ret_keys[]  = $row;
  70.     // Backups the list of primary keys
  71.     if ($row['Key_name'] == 'PRIMARY') {
  72.         $primary .= $row['Column_name'] . ', ';
  73.         $pk_array[$row['Column_name']] = 1;
  74.     }
  75. } // end while
  76. PMA_DBI_free_result($result);
  77.  
  78. // 3. Get fields
  79. $fields_rs   = PMA_DBI_query('SHOW FULL FIELDS FROM ' . PMA_backquote($table) . ';', NULL, PMA_DBI_QUERY_STORE);
  80. $fields_cnt  = PMA_DBI_num_rows($fields_rs);
  81.  
  82. // Get more complete field information
  83. // For now, this is done just for MySQL 4.1.2+ new TIMESTAMP options
  84. // but later, if the analyser returns more information, it
  85. // could be executed for any MySQL version and replace
  86. // the info given by SHOW FULL FIELDS FROM.
  87.  
  88. if (PMA_MYSQL_INT_VERSION >= 40102) {
  89.     $show_create_table_query = 'SHOW CREATE TABLE '
  90.         . PMA_backquote($db) . '.' . PMA_backquote($table);
  91.     $show_create_table_res = PMA_DBI_query($show_create_table_query);
  92.     list(,$show_create_table) = PMA_DBI_fetch_row($show_create_table_res);
  93.     PMA_DBI_free_result($show_create_table_res);
  94.     unset($show_create_table_res, $show_create_table_query);
  95.     $analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table));
  96. }
  97.  
  98. /**
  99.  * Displays the table structure ('show table' works correct since 3.23.03)
  100.  */
  101.  
  102. $i = 0;
  103.  
  104. ?>
  105.  
  106. <!-- TABLE INFORMATION -->
  107.  
  108. <form method="post" action="tbl_properties_structure.php" name="fieldsForm">
  109.     <?php echo PMA_generate_common_hidden_inputs($db, $table); ?>
  110. <table border="<?php echo $cfg['Border']; ?>" cellpadding="2" cellspacing="1">
  111. <tr>
  112. <?php echo $tbl_is_view ? '' : '    <th id="th' . ++$i . '"> </th>' . "\n"; ?>
  113.     <th id="th<?php echo ++$i; ?>"> <?php echo $strField; ?> </th>
  114.     <th id="th<?php echo ++$i; ?>"><?php echo $strType; ?></th>
  115. <?php echo PMA_MYSQL_INT_VERSION >= 40100 ? '    <th id="th' . ++$i . '">' . $strCollation . '</th>' . "\n" : ''; ?>
  116.     <th id="th<?php echo ++$i; ?>"><?php echo $strAttr; ?></th>
  117.     <th id="th<?php echo ++$i; ?>"><?php echo $strNull; ?></th>
  118.     <th id="th<?php echo ++$i; ?>"><?php echo $strDefault; ?></th>
  119.     <th id="th<?php echo ++$i; ?>"><?php echo $strExtra; ?></th>
  120. <?php echo $tbl_is_view ? '' : '    <th colspan="6" id="th' . ++$i . '">' . $strAction . '</th>' . "\n"; ?>
  121. </tr>
  122.  
  123. <?php
  124. unset($i);
  125. $comments_map = array();
  126. $mime_map = array();
  127.  
  128. if ($GLOBALS['cfg']['ShowPropertyComments']) {
  129.     require_once('./libraries/relation.lib.php');
  130.     require_once('./libraries/transformations.lib.php');
  131.  
  132.     $cfgRelation = PMA_getRelationsParam();
  133.  
  134.  
  135.     if ($cfgRelation['commwork']) {
  136.         $comments_map = PMA_getComments($db, $table);
  137.  
  138.         if ($cfgRelation['mimework'] && $cfg['BrowseMIME']) {
  139.             $mime_map = PMA_getMIME($db, $table, true);
  140.         }
  141.     }
  142. }
  143.  
  144. $i         = 0;
  145. $aryFields = array();
  146. $checked   = (!empty($checkall) ? ' checked="checked"' : '');
  147. $save_row  = array();
  148.  
  149. while ($row = PMA_DBI_fetch_assoc($fields_rs)) {
  150.     $save_row[] = $row;
  151.     $i++;
  152.     $bgcolor          = ($i % 2) ? $cfg['BgcolorOne'] : $cfg['BgcolorTwo'];
  153.     $aryFields[]      = $row['Field'];
  154.  
  155.     if ($GLOBALS['cfg']['BrowsePointerEnable'] == TRUE) {
  156.         $on_mouse = ' onmouseover="setPointer(this, ' . $i . ', \'over\', \'' . $bgcolor . '\', \'' . $GLOBALS['cfg']['BrowsePointerColor'] . '\', \'' . $GLOBALS['cfg']['BrowseMarkerColor'] . '\');"'
  157.                   . ' onmouseout="setPointer(this, ' . $i . ', \'out\', \'' . $bgcolor . '\', \'' . $GLOBALS['cfg']['BrowsePointerColor'] . '\', \'' . $GLOBALS['cfg']['BrowseMarkerColor'] . '\');"';
  158.     } else {
  159.         $on_mouse = '';
  160.     }
  161.     if ($GLOBALS['cfg']['BrowseMarkerEnable'] == TRUE) {
  162.         $on_mouse .= ' onmousedown="setPointer(this, ' . $i . ', \'click\', \'' . $bgcolor . '\', \'' . $GLOBALS['cfg']['BrowsePointerColor'] . '\', \'' . $GLOBALS['cfg']['BrowseMarkerColor'] . '\');"';
  163.     }
  164.  
  165.     $click_mouse = ' onmousedown="document.getElementById(\'checkbox_row_' . $i . '\').checked = (document.getElementById(\'checkbox_row_' . $i . '\').checked ? false : true);" ';
  166.  
  167.     $type             = $row['Type'];
  168.     // reformat mysql query output - staybyte - 9. June 2001
  169.     // loic1: set or enum types: slashes single quotes inside options
  170.     if (preg_match('@^(set|enum)\((.+)\)$@i', $type, $tmp)) {
  171.         $tmp[2]       = substr(preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1);
  172.         $type         = $tmp[1] . '(' . str_replace(',', ', ', $tmp[2]) . ')';
  173.         $type_nowrap  = '';
  174.  
  175.         $binary       = 0;
  176.         $unsigned     = 0;
  177.         $zerofill     = 0;
  178.     } else {
  179.         $type_nowrap  = ' nowrap="nowrap"';
  180.         // strip the "BINARY" attribute, except if we find "BINARY(" because
  181.         // this would be a BINARY or VARBINARY field type
  182.         if (!preg_match('@BINARY[\(]@i', $type)) {
  183.             $type         = preg_replace('@BINARY@i', '', $type);
  184.         }
  185.         $type         = preg_replace('@ZEROFILL@i', '', $type);
  186.         $type         = preg_replace('@UNSIGNED@i', '', $type);
  187.         if (empty($type)) {
  188.             $type     = ' ';
  189.         }
  190.  
  191.         if (!preg_match('@BINARY[\(]@i', $row['Type'])) {
  192.             $binary           = stristr($row['Type'], 'blob') || stristr($row['Type'], 'binary');
  193.         } else {
  194.             $binary           = FALSE;
  195.         }
  196.  
  197.         $unsigned     = stristr($row['Type'], 'unsigned');
  198.         $zerofill     = stristr($row['Type'], 'zerofill');
  199.     }
  200.  
  201.     // rabus: Devide charset from the rest of the type definition (MySQL >= 4.1)
  202.     unset($field_charset);
  203.     if (PMA_MYSQL_INT_VERSION >= 40100) {
  204.         if ((substr($type, 0, 4) == 'char'
  205.             || substr($type, 0, 7) == 'varchar'
  206.             || substr($type, 0, 4) == 'text'
  207.             || substr($type, 0, 8) == 'tinytext'
  208.             || substr($type, 0, 10) == 'mediumtext'
  209.             || substr($type, 0, 8) == 'longtext'
  210.             || substr($type, 0, 3) == 'set'
  211.             || substr($type, 0, 4) == 'enum'
  212.             ) && !$binary) {
  213.             if (strpos($type, ' character set ')) {
  214.                 $type = substr($type, 0, strpos($type, ' character set '));
  215.             }
  216.             if (!empty($row['Collation'])) {
  217.                 $field_charset = $row['Collation'];
  218.             } else {
  219.                 $field_charset = '';
  220.             }
  221.         } else {
  222.             $field_charset = '';
  223.         }
  224.     }
  225.  
  226.     // garvin: Display basic mimetype [MIME]
  227.     if ($cfgRelation['commwork'] && $cfgRelation['mimework'] && $cfg['BrowseMIME'] && isset($mime_map[$row['Field']]['mimetype'])) {
  228.         $type_mime = '<br />MIME: ' . str_replace('_', '/', $mime_map[$row['Field']]['mimetype']);
  229.     } else {
  230.         $type_mime = '';
  231.     }
  232.  
  233.     $attribute     = ' ';
  234.     if ($binary) {
  235.         $attribute = 'BINARY';
  236.     }
  237.     if ($unsigned) {
  238.         $attribute = 'UNSIGNED';
  239.     }
  240.     if ($zerofill) {
  241.         $attribute = 'UNSIGNED ZEROFILL';
  242.     }
  243.     
  244.     // MySQL 4.1.2+ TIMESTAMP options
  245.     // (if on_update_current_timestamp is set, then it's TRUE)
  246.     if (isset($analyzed_sql[0]['create_table_fields'][$row['Field']]['on_update_current_timestamp'])) {
  247.         $attribute = 'ON UPDATE CURRENT_TIMESTAMP';
  248.     }
  249.  
  250.     if (!isset($row['Default'])) {
  251.         if ($row['Null'] == 'YES') {
  252.             $row['Default'] = '<i>NULL</i>';
  253.         }
  254.     } else {
  255.         $row['Default'] = htmlspecialchars($row['Default']);
  256.     }
  257.  
  258.     $field_encoded = urlencode($row['Field']);
  259.     $field_name    = htmlspecialchars($row['Field']);
  260.  
  261.     // garvin: underline commented fields and display a hover-title (CSS only)
  262.  
  263.     $comment_style = '';
  264.     if (isset($comments_map[$row['Field']])) {
  265.         $field_name = '<span style="border-bottom: 1px dashed black;" title="' . htmlspecialchars($comments_map[$row['Field']]) . '">' . $field_name . '</span>';
  266.     }
  267.  
  268.     if (isset($pk_array[$row['Field']])) {
  269.         $field_name = '<u>' . $field_name . '</u>';
  270.     }
  271.     echo "\n";
  272.  
  273.     $titles = array();
  274.     if ($cfg['PropertiesIconic'] == true) {
  275.         // We need to copy the value or else the == 'both' check will always return true
  276.         $propicon = (string)$cfg['PropertiesIconic'];
  277.  
  278.         if ($propicon == 'both') {
  279.             $iconic_spacer = '<div class="nowrap">';
  280.         } else {
  281.             $iconic_spacer = '';
  282.         }
  283.  
  284.         // images replaced 2004-05-08 by mkkeck
  285.         $titles['Change']        = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_edit.png" alt="' . $strChange . '" title="' . $strChange . '" border="0" />';
  286.         $titles['Drop']          = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_drop.png" alt="' . $strDrop . '" title="' . $strDrop . '" border="0" />';
  287.         $titles['NoDrop']        = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_drop.png" alt="' . $strDrop . '" title="' . $strDrop . '" border="0" />';
  288.         $titles['Primary']       = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_primary.png" alt="' . $strPrimary . '" title="' . $strPrimary . '" border="0" />';
  289.         $titles['Index']         = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_index.png" alt="' . $strIndex . '" title="' . $strIndex . '" border="0" />';
  290.         $titles['Unique']        = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_unique.png" alt="' . $strUnique . '" title="' . $strUnique . '" border="0" />';
  291.         $titles['IdxFulltext']   = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_ftext.png" alt="' . $strIdxFulltext . '" title="' . $strIdxFulltext . '" border="0" />';
  292.         $titles['NoPrimary']     = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'bd_primary.png" alt="' . $strPrimary . '" title="' . $strPrimary . '" border="0" />';
  293.         $titles['NoIndex']       = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'bd_index.png" alt="' . $strIndex . '" title="' . $strIndex . '" border="0" />';
  294.         $titles['NoUnique']      = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'bd_unique.png" alt="' . $strUnique . '" title="' . $strUnique . '" border="0" />';
  295.         $titles['NoIdxFulltext'] = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'bd_ftext.png" alt="' . $strIdxFulltext . '" title="' . $strIdxFulltext . '" border="0" />';
  296.  
  297.         if ($propicon == 'both') {
  298.             $titles['Change']        .= ' ' . $strChange . '</div>';
  299.             $titles['Drop']          .= ' ' . $strDrop . '</div>';
  300.             $titles['NoDrop']        .= ' ' . $strDrop . '</div>';
  301.             $titles['Primary']       .= ' ' . $strPrimary . '</div>';
  302.             $titles['Index']         .= ' ' . $strIndex . '</div>';
  303.             $titles['Unique']        .= ' ' . $strUnique . '</div>';
  304.             $titles['IdxFulltext'  ] .= ' ' . $strIdxFulltext . '</div>';
  305.             $titles['NoPrimary']     .= ' ' . $strPrimary . '</div>';
  306.             $titles['NoIndex']       .= ' ' . $strIndex . '</div>';
  307.             $titles['NoUnique']      .= ' ' . $strUnique . '</div>';
  308.             $titles['NoIdxFulltext'] .= ' ' . $strIdxFulltext . '</div>';
  309.         }
  310.     } else {
  311.         $titles['Change']        = $strChange;
  312.         $titles['Drop']          = $strDrop;
  313.         $titles['NoDrop']        = $strDrop;
  314.         $titles['Primary']       = $strPrimary;
  315.         $titles['Index']         = $strIndex;
  316.         $titles['Unique']        = $strUnique;
  317.         $titles['IdxFulltext']   = $strIdxFulltext;
  318.         $titles['NoPrimary']     = $strPrimary;
  319.         $titles['NoIndex']       = $strIndex;
  320.         $titles['NoUnique']      = $strUnique;
  321.         $titles['NoIdxFulltext'] = $strIdxFulltext;
  322.     }
  323.  
  324.     ?>
  325. <tr <?php echo $on_mouse; ?>>
  326.     <?php
  327.     if (!$tbl_is_view) {
  328.         ?>
  329.     <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  330.         <input type="checkbox" name="selected_fld[]" value="<?php echo $field_encoded; ?>" id="checkbox_row_<?php echo $i; ?>" <?php echo $checked; ?> />
  331.     </td>
  332.         <?php
  333.     }
  334.     ?>
  335.     <td <?php echo $click_mouse; ?> bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap"> <label onclick="return (document.getElementById('checkbox_row_<?php echo $i; ?>') ? false : true)" for="checkbox_row_<?php echo $i; ?>"><?php echo $field_name; ?></label> </td>
  336.     <td <?php echo $click_mouse; ?> bgcolor="<?php echo $bgcolor; ?>"<?php echo $type_nowrap; ?>><?php echo $type; echo $type_mime; ?><bdo dir="ltr"></bdo></td>
  337. <?php echo PMA_MYSQL_INT_VERSION >= 40100 ? '    <td bgcolor="' . $bgcolor . '" ' . $click_mouse . '>' . (empty($field_charset) ? ' ' : '<dfn title="' . PMA_getCollationDescr($field_charset) . '">' . $field_charset . '</dfn>') . '</td>' . "\n" : '' ?>
  338.     <td <?php echo $click_mouse; ?> bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap" style="font-size: <?php echo $font_smallest; ?>"><?php echo $attribute; ?></td>
  339.     <td <?php echo $click_mouse; ?> bgcolor="<?php echo $bgcolor; ?>"><?php echo (($row['Null'] == 'YES') ? $strYes : $strNo); ?> </td>
  340.     <td <?php echo $click_mouse; ?> bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap"><?php if (isset($row['Default'])) echo $row['Default']; ?> </td>
  341.     <td <?php echo $click_mouse; ?> bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap"><?php echo $row['Extra']; ?> </td>
  342.     <?php
  343.     if (!$tbl_is_view) {
  344.         ?>
  345.     <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  346.         <a href="tbl_alter.php?<?php echo $url_query; ?>&field=<?php echo $field_encoded; ?>">
  347.             <?php echo $titles['Change']; ?></a>
  348.     </td>
  349.     <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  350.         <?php
  351.         // loic1: Drop field only if there is more than one field in the table
  352.         if ($fields_cnt > 1) {
  353.             echo "\n";
  354.             ?>
  355.         <a href="sql.php?<?php echo $url_query; ?>&sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' DROP ' . PMA_backquote($row['Field'])); ?>&cpurge=1&purgekey=<?php echo urlencode($row['Field']); ?>&zero_rows=<?php echo urlencode(sprintf($strFieldHasBeenDropped, htmlspecialchars($row['Field']))); ?>"
  356.             onclick="return confirmLink(this, 'ALTER TABLE <?php echo PMA_jsFormat($table); ?> DROP <?php echo PMA_jsFormat($row['Field']); ?>')">
  357.             <?php echo $titles['Drop']; ?></a>
  358.             <?php
  359.         } else {
  360.             echo "\n" . '        ' . $titles['NoDrop'];
  361.         }
  362.         echo "\n";
  363.         ?>
  364.     </td>
  365.     <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  366.         <?php
  367.         if ($type == 'text' || $type == 'blob') {
  368.             echo $titles['NoPrimary'] . "\n";
  369.         } else {
  370.             echo "\n";
  371.             ?>
  372.         <a href="sql.php?<?php echo $url_query; ?>&sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ( empty($primary) ? '' : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY(' . PMA_backquote($row['Field']) . ')'); ?>&zero_rows=<?php echo urlencode(sprintf($strAPrimaryKey, htmlspecialchars($row['Field']))); ?>"
  373.             onclick="return confirmLink(this, 'ALTER TABLE <?php echo PMA_jsFormat($table) . ( empty($primary) ? '' : ' DROP PRIMARY KEY,'); ?> ADD PRIMARY KEY(<?php echo PMA_jsFormat($row['Field']); ?>)')">
  374.             <?php echo $titles['Primary']; ?></a>
  375.             <?php
  376.         }
  377.         echo "\n";
  378.         ?>
  379.     </td>
  380.     <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  381.         <?php
  382.         if ($type == 'text' || $type == 'blob') {
  383.             echo $titles['NoIndex'] . "\n";
  384.         } else {
  385.             echo "\n";
  386.             ?>
  387.         <a href="sql.php?<?php echo $url_query; ?>&sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX(' . PMA_backquote($row['Field']) . ')'); ?>&zero_rows=<?php echo urlencode(sprintf($strAnIndex ,htmlspecialchars($row['Field']))); ?>">
  388.             <?php echo $titles['Index']; ?></a>
  389.             <?php
  390.         }
  391.         echo "\n";
  392.         ?>
  393.     </td>
  394.     <td align="center" bgcolor="<?php echo $bgcolor; ?>">
  395.         <?php
  396.         if ($type == 'text' || $type == 'blob') {
  397.             echo $titles['NoUnique'] . "\n";
  398.         } else {
  399.             echo "\n";
  400.             ?>
  401.         <a href="sql.php?<?php echo $url_query; ?>&sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE(' . PMA_backquote($row['Field']) . ')'); ?>&zero_rows=<?php echo urlencode(sprintf($strAnIndex , htmlspecialchars($row['Field']))); ?>">
  402.             <?php echo $titles['Unique']; ?></a>
  403.             <?php
  404.         }
  405.         echo "\n";
  406.         ?>
  407.     </td>
  408.     <?php
  409.         if ((!empty($tbl_type) && $tbl_type == 'MYISAM')
  410.             && (strpos(' ' . $type, 'text') || strpos(' ' . $type, 'varchar'))) {
  411.             echo "\n";
  412.             ?>
  413.     <td align="center" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
  414.         <a href="sql.php?<?php echo $url_query; ?>&sql_query=<?php echo urlencode('ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT(' . PMA_backquote($row['Field']) . ')'); ?>&zero_rows=<?php echo urlencode(sprintf($strAnIndex , htmlspecialchars($row['Field']))); ?>">
  415.             <?php echo $titles['IdxFulltext']; ?></a>
  416.     </td>
  417.             <?php
  418.         } else {
  419.             echo "\n";
  420.         ?>
  421.     <td align="center" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
  422.         <?php echo $titles['NoIdxFulltext'] . "\n"; ?>
  423.     </td>
  424.         <?php
  425.         } // end if... else...
  426.         echo "\n";
  427.     } // end if (!$tbl_is_view)
  428.     ?>
  429. </tr>
  430.     <?php
  431.     unset($field_charset);
  432. } // end while
  433.  
  434. echo "\n";
  435.  
  436. if (!$tbl_is_view) {
  437.  
  438.     $checkall_url = 'tbl_properties_structure.php?' . PMA_generate_common_url($db,$table);
  439.     ?>
  440.  
  441. <tr>
  442.     <td colspan="<?php echo PMA_MYSQL_INT_VERSION >= 40100 ? '14' : '13'; ?>">
  443.         <table>
  444.             <tr>
  445.                 <td>
  446.                     <img src="<?php echo $pmaThemeImage . 'arrow_' . $text_dir . '.png'; ?>" border="0" width="38" height="22" alt="<?php echo $strWithChecked; ?>" />
  447.         <a href="<?php echo $checkall_url; ?>&checkall=1" onclick="setCheckboxes('fieldsForm', true); return false;">
  448.             <?php echo $strCheckAll; ?></a>
  449.          / 
  450.         <a href="<?php echo $checkall_url; ?>" onclick="setCheckboxes('fieldsForm', false); return false;">
  451.             <?php echo $strUncheckAll; ?></a>
  452.            
  453.         <i><?php echo $strWithChecked; ?></i>  
  454.                 </td>
  455.                 <td>
  456.                     <?php
  457.  
  458.     if ($cfg['PropertiesIconic']) {
  459.         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_change', $strChange, 'b_edit.png');
  460.         // Drop button if there is at least two fields
  461.         if ($fields_cnt > 1) {
  462.             PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_drop', $strDrop, 'b_drop.png');
  463.         }
  464.         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_primary', $strPrimary, 'b_primary.png');
  465.         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_index', $strIndex, 'b_index.png');
  466.         PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_unique', $strUnique, 'b_unique.png');
  467.         if ((!empty($tbl_type) && $tbl_type == 'MYISAM')) {
  468.             PMA_buttonOrImage('submit_mult', 'mult_submit', 'submit_mult_fulltext', $strIdxFulltext, 'b_ftext.png');
  469.         }
  470.     } else {
  471.         echo '<input type="submit" name="submit_mult" value="' . $strChange . '" title="' . $strChange . '" />' . "\n";
  472.         // Drop button if there is at least two fields
  473.         if ($fields_cnt > 1) {
  474.             echo ' <i>' . $strOr . '</i> ' . "\n"
  475.                . '<input type="submit" name="submit_mult" value="' . $strDrop . '" title="' . $strDrop . '" />' . "\n";
  476.         }
  477.         echo ' <i>' . $strOr . '</i> ' . "\n"
  478.            . '<input type="submit" name="submit_mult" value="' . $strPrimary . '" title="' . $strPrimary . '" />' . "\n";
  479.         echo ' <i>' . $strOr . '</i> ' . "\n"
  480.            . '<input type="submit" name="submit_mult" value="' . $strIndex . '" title="' . $strIndex . '" />' . "\n";
  481.         echo ' <i>' . $strOr . '</i> ' . "\n"
  482.            . '<input type="submit" name="submit_mult" value="' . $strUnique . '" title="' . $strUnique . '" />' . "\n";
  483.         if ((!empty($tbl_type) && $tbl_type == 'MYISAM')) {
  484.             echo ' <i>' . $strOr . '</i> ' . "\n"
  485.                . '<input type="submit" name="submit_mult" value="' . $strIdxFulltext . '" title="' . $strIdxFulltext . '" />' . "\n";
  486.         }
  487.     }
  488.  
  489.     ?>
  490.                 </td>
  491.             </tr>
  492.         </table>
  493.     </td>
  494. </tr>
  495.     <?php
  496. }
  497. ?>
  498. </table>
  499. </form>
  500.  
  501. <hr />
  502.  
  503.  
  504. <?php
  505. if (!$tbl_is_view) {
  506.     /**
  507.      * Work on the table
  508.      */
  509.     ?>
  510. <!-- TABLE WORK -->
  511. <!-- Printable view of the table -->
  512. <a href="tbl_printview.php?<?php echo $url_query; ?>"><?php
  513.     if ($cfg['PropertiesIconic']) {
  514.         echo '<img src="' . $pmaThemeImage . 'b_print.png" border="0" hspace="2" align="middle" width="16" height="16" alt="' . $strPrintView . '"/>';
  515.     }
  516.     echo $strPrintView;
  517.     ?></a>   
  518.  
  519.     <?php
  520.     // if internal relations are available, or the table type is INNODB
  521.     // ($tbl_type comes from tbl_properties_table_info.php)
  522.  
  523.     if ($cfg['Server']['relation'] || $tbl_type=="INNODB") {
  524.         ?>
  525. <!-- Work on Relations -->
  526. <a href="tbl_relation.php?<?php echo $url_query; ?>"><?php
  527.     if ($cfg['PropertiesIconic']) {
  528.         echo '<img src="' . $pmaThemeImage . 'b_relations.png" border="0" hspace="2" align="middle" width="16" height="16" alt="' . $strRelationView . '"/>';
  529.     }
  530.     echo $strRelationView;
  531. ?></a>   
  532.         <?php
  533.     }
  534.     ?>
  535. <!-- Let MySQL propose the optimal structure -->
  536. <a href="sql.php?<?php echo $url_query; ?>&session_max_rows=all&sql_query=<?php echo urlencode('SELECT * FROM ' . PMA_backquote($table) . ' PROCEDURE ANALYSE()'); ?>"><?php
  537.     if ($cfg['PropertiesIconic']) {
  538.         echo '<img src="' . $pmaThemeImage . 'b_tblanalyse.png" border="0" hspace="2" align="middle" width="16" height="16" alt="' . $strStructPropose . '" />';
  539.     }
  540.     echo $strStructPropose;
  541. ?></a><?php
  542.     echo PMA_showMySQLDocu('Extending_MySQL', 'procedure_analyse') . "\n";
  543. ?><br />
  544. <!-- Add some new fields -->
  545. <form method="post" action="tbl_addfield.php"
  546.     onsubmit="return checkFormElementInRange(this, 'num_fields', 1)">
  547.     <?php
  548.         echo PMA_generate_common_hidden_inputs($db, $table);
  549.         if ($cfg['PropertiesIconic']) {
  550.             echo '<img src="' . $pmaThemeImage . 'b_insrow.png" width="16" height="16" border="0" hspace="2" align="middle" alt="' . $strAddNewField . '"/>';
  551.         }
  552.         echo sprintf($strAddFields, '<input type="text" name="num_fields" size="2" maxlength="2" value="1" style="vertical-align: middle" onfocus="this.select()" />');
  553.     ?>
  554.     <input type="radio" name="field_where" id="radio_field_where_last" value="last" checked="checked" /><label for="radio_field_where_last"><?php echo $strAtEndOfTable; ?></label>
  555.     <input type="radio" name="field_where" id="radio_field_where_first" value="first" /><label for="radio_field_where_first"><?php echo $strAtBeginningOfTable; ?></label>
  556.     <input type="radio" name="field_where" id="radio_field_where_after" value="after" /><?php
  557.         $fieldOptions = '</label><select name="after_field" style="vertical-align: middle" onclick="this.form.field_where[2].checked=true" onchange="this.form.field_where[2].checked=true">';
  558.         foreach ($aryFields AS $fieldname) {
  559.             $fieldOptions .= '<option value="' . htmlspecialchars($fieldname) . '">' . htmlspecialchars($fieldname) . '</option>' . "\n";
  560.         }
  561.         unset($aryFields);
  562.         $fieldOptions .= '</select><label for="radio_field_where_after">';
  563.         echo str_replace('<label for="radio_field_where_after"></label>', '', '<label for="radio_field_where_after">' . sprintf($strAfter, $fieldOptions) . '</label>') . "\n";
  564.         ?>
  565.     <input type="submit" value="<?php echo $strGo; ?>" style="vertical-align: middle" />
  566. </form>
  567.  
  568. <hr />
  569.  
  570.     <?php
  571. }
  572.  
  573. /**
  574.  * If there are more than 20 rows, displays browse/select/insert/empty/drop
  575.  * links again
  576.  */
  577. if ($fields_cnt > 20) {
  578.     ?>
  579. <!-- Browse links -->
  580.     <?php
  581.     echo "\n";
  582.     require('./tbl_properties_links.php');
  583. } // end if ($fields_cnt > 20)
  584. echo "\n\n";
  585.  
  586.  
  587. if (!$tbl_is_view) {
  588.     /**
  589.      * Displays indexes
  590.      */
  591.     ?>
  592. <!-- Indexes, space usage and row statistics -->
  593. <table border="0" cellspacing="0" cellpadding="0">
  594. <tr>
  595.     <td valign="top">
  596.     <?php
  597.     define('PMA_IDX_INCLUDED', 1);
  598.     require ('./tbl_indexes.php');
  599.     ?>
  600.     </td>
  601.  
  602.     <?php
  603.     /**
  604.      * Displays Space usage and row statistics
  605.      */
  606.     // BEGIN - Calc Table Space - staybyte - 9 June 2001
  607.     // loic1, 22 feb. 2002: updated with patch from
  608.     //                      Joshua Nye <josh at boxcarmedia.com> to get valid
  609.     //                      statistics whatever is the table type
  610.     if ($cfg['ShowStats']) {
  611.         $nonisam     = FALSE;
  612.         $is_innodb = (isset($showtable['Type']) && $showtable['Type'] == 'InnoDB');
  613.         if (isset($showtable['Type']) && !preg_match('@ISAM|HEAP@i', $showtable['Type'])) {
  614.             $nonisam = TRUE;
  615.         }
  616.         if ($nonisam == FALSE || $is_innodb) {
  617.             // Gets some sizes
  618.             $mergetable     = FALSE;
  619.             if (isset($showtable['Type']) && $showtable['Type'] == 'MRG_MyISAM') {
  620.                 $mergetable = TRUE;
  621.             }
  622.             list($data_size, $data_unit)         = PMA_formatByteDown($showtable['Data_length']);
  623.             if ($mergetable == FALSE) {
  624.                 list($index_size, $index_unit)   = PMA_formatByteDown($showtable['Index_length']);
  625.             }
  626.             if (isset($showtable['Data_free']) && $showtable['Data_free'] > 0) {
  627.                 list($free_size, $free_unit)     = PMA_formatByteDown($showtable['Data_free']);
  628.                 list($effect_size, $effect_unit) = PMA_formatByteDown($showtable['Data_length'] + $showtable['Index_length'] - $showtable['Data_free']);
  629.             } else {
  630.                 list($effect_size, $effect_unit) = PMA_formatByteDown($showtable['Data_length'] + $showtable['Index_length']);
  631.             }
  632.             list($tot_size, $tot_unit)           = PMA_formatByteDown($showtable['Data_length'] + $showtable['Index_length']);
  633.             if ($table_info_num_rows > 0) {
  634.                 list($avg_size, $avg_unit)       = PMA_formatByteDown(($showtable['Data_length'] + $showtable['Index_length']) / $showtable['Rows'], 6, 1);
  635.             }
  636.  
  637.             // Displays them
  638.             ?>
  639.  
  640.     <!-- Space usage -->
  641.     <td width="20"> </td>
  642.     <td valign="top">
  643.         <a name="showusage"></a>
  644.         <table border="<?php echo $cfg['Border']; ?>" cellpadding="2" cellspacing="1">
  645.         <tr><td class="tblHeaders" colspan="3"><?php echo $strSpaceUsage . ': ' . "\n"; ?></td></tr>
  646.         <tr>
  647.             <th><?php echo $strType; ?></th>
  648.             <th colspan="2" align="center"><?php echo $strUsage; ?></th>
  649.         </tr>
  650.         <tr>
  651.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>" style="padding-right: 10px"><?php echo $strData; ?></td>
  652.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>" align="right" nowrap="nowrap"><?php echo $data_size; ?></td>
  653.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>"><?php echo $data_unit; ?></td>
  654.         </tr>
  655.             <?php
  656.             if (isset($index_size)) {
  657.                 echo "\n";
  658.                 ?>
  659.         <tr>
  660.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>" style="padding-right: 10px"><?php echo $strIndex; ?></td>
  661.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>" align="right" nowrap="nowrap"><?php echo $index_size; ?></td>
  662.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>"><?php echo $index_unit; ?></td>
  663.         </tr>
  664.                 <?php
  665.             }
  666.             if (isset($free_size)) {
  667.                 echo "\n";
  668.                 ?>
  669.         <tr style="color: #bb0000">
  670.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>" style="padding-right: 10px"><?php echo $strOverhead; ?></td>
  671.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>" align="right" nowrap="nowrap"><?php echo $free_size; ?></td>
  672.             <td bgcolor="<?php echo $cfg['BgcolorTwo']; ?>"><?php echo $free_unit; ?></td>
  673.         </tr>
  674.         <tr>
  675.             <td bgcolor="<?php echo $cfg['BgcolorOne']; ?>" style="padding-right: 10px"><?php echo $strEffective; ?></td>
  676.             <td bgcolor="<?php echo $cfg['BgcolorOne']; ?>" align="right" nowrap="nowrap"><?php echo $effect_size; ?></td>
  677.             <td bgcolor="<?php echo $cfg['BgcolorOne']; ?>"><?php echo $effect_unit; ?></td>
  678.         </tr>
  679.                 <?php
  680.             }
  681.             if (isset($tot_size) && $mergetable == FALSE) {
  682.                 echo "\n";
  683.             ?>
  684.         <tr>
  685.             <td bgcolor="<?php echo $cfg['BgcolorOne']; ?>" style="padding-right: 10px"><?php echo $strTotalUC; ?></td>
  686.             <td bgcolor="<?php echo $cfg['BgcolorOne']; ?>" align="right" nowrap="nowrap"><?php echo $tot_size; ?></td>
  687.             <td bgcolor="<?php echo $cfg['BgcolorOne']; ?>"><?php echo $tot_unit; ?></td>
  688.         </tr>
  689.                 <?php
  690.             }
  691.             // Optimize link if overhead
  692.             if (isset($free_size) && ($tbl_type == 'MYISAM' || $tbl_type == 'BDB')) {
  693.                 echo "\n";
  694.                 ?>
  695.         <tr>
  696.             <td colspan="3" align="center" bgcolor="<?php echo $cfg['BgcolorTwo']; ?>">
  697.                 <a href="sql.php?<?php echo $url_query; ?>&pos=0&sql_query=<?php echo urlencode('OPTIMIZE TABLE ' . PMA_backquote($table)); ?>"><?php
  698.                     if ($cfg['PropertiesIconic']) {
  699.                        echo '<img src="' . $pmaThemeImage . 'b_tbloptimize.png" width="16" height="16" border="0" hspace="2" align="middle" alt="' . $strOptimizeTable. '" />';
  700.                     }
  701.                     echo $strOptimizeTable;
  702.                 ?></a>
  703.             </td>
  704.         </tr>
  705.                 <?php
  706.             }
  707.             echo "\n";
  708.             ?>
  709.         </table>
  710.     </td>
  711.  
  712.     <!-- Rows Statistic -->
  713.     <td width="20"> </td>
  714.     <td valign="top">
  715.         <table border="<?php echo $cfg['Border']; ?>" cellpadding="2" cellspacing="1">
  716.         <tr><td class="tblHeaders" colspan="2"><?php echo $strRowsStatistic . ': ' . "\n"; ?></td></tr>
  717.         <tr>
  718.             <th><?php echo $strStatement; ?></th>
  719.             <th align="center"><?php echo $strValue; ?></th>
  720.         </tr>
  721.             <?php
  722.             $i = 0;
  723.             if (isset($showtable['Row_format'])) {
  724.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  725.                 echo "\n";
  726.                 ?>
  727.         <tr>
  728.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strFormat; ?></td>
  729.             <td bgcolor="<?php echo $bgcolor; ?>" align="<?php echo $cell_align_left; ?>" nowrap="nowrap">
  730.                 <?php
  731.                 echo '                ';
  732.                 if ($showtable['Row_format'] == 'Fixed') {
  733.                     echo $strFixed;
  734.                 }
  735.                 else if ($showtable['Row_format'] == 'Dynamic') {
  736.                     echo $strDynamic;
  737.                 }
  738.                 else {
  739.                     echo $showtable['Row_format'];
  740.                 }
  741.                 echo "\n";
  742.                 ?>
  743.             </td>
  744.         </tr>
  745.                 <?php
  746.             }
  747.             if (PMA_MYSQL_INT_VERSION >= 40100 && !empty($tbl_collation)) {
  748.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  749.                 ?>
  750.         <tr>
  751.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strCollation; ?></td>
  752.             <td bgcolor="<?php echo $bgcolor; ?>" align="<?php echo $cell_align_left; ?>" nowrap="nowrap">
  753.                 <?php
  754.                 echo '<dfn title="' . PMA_getCollationDescr($tbl_collation) . '">' . $tbl_collation . '</dfn>';
  755.                 ?>
  756.             </td>
  757.         </tr>
  758.                 <?php
  759.             }
  760.             if (!$is_innodb && isset($showtable['Rows'])) {
  761.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  762.                 echo "\n";
  763.                 ?>
  764.         <tr>
  765.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strRows; ?></td>
  766.             <td bgcolor="<?php echo $bgcolor; ?>" align="right" nowrap="nowrap">
  767.                 <?php echo number_format($showtable['Rows'], 0, $number_decimal_separator, $number_thousands_separator) . "\n"; ?>
  768.             </td>
  769.         </tr>
  770.                 <?php
  771.             }
  772.             if (!$is_innodb && isset($showtable['Avg_row_length']) && $showtable['Avg_row_length'] > 0) {
  773.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  774.                 echo "\n";
  775.                 ?>
  776.         <tr>
  777.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strRowLength; ?> ø</td>
  778.             <td bgcolor="<?php echo $bgcolor; ?>" align="right" nowrap="nowrap">
  779.                 <?php echo number_format($showtable['Avg_row_length'], 0, $number_decimal_separator, $number_thousands_separator) . "\n"; ?>
  780.             </td>
  781.         </tr>
  782.                 <?php
  783.             }
  784.             if (!$is_innodb && isset($showtable['Data_length']) && $showtable['Rows'] > 0 && $mergetable == FALSE) {
  785.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  786.                 echo "\n";
  787.                 ?>
  788.         <tr>
  789.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strRowSize; ?> ø</td>
  790.             <td bgcolor="<?php echo $bgcolor; ?>" align="right" nowrap="nowrap">
  791.                 <?php echo $avg_size . ' ' . $avg_unit . "\n"; ?>
  792.             </td>
  793.         </tr>
  794.                 <?php
  795.             }
  796.             if (isset($showtable['Auto_increment'])) {
  797.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  798.                 echo "\n";
  799.                 ?>
  800.         <tr>
  801.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strNext; ?> Autoindex</td>
  802.             <td bgcolor="<?php echo $bgcolor; ?>" align="right" nowrap="nowrap">
  803.                 <?php echo number_format($showtable['Auto_increment'], 0, $number_decimal_separator, $number_thousands_separator) . "\n"; ?>
  804.             </td>
  805.         </tr>
  806.                 <?php
  807.             }
  808.             echo "\n";
  809.  
  810.             if (isset($showtable['Create_time'])) {
  811.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  812.                 echo "\n";
  813.                 ?>
  814.         <tr>
  815.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strStatCreateTime; ?></td>
  816.             <td<?php if($theme=='original' || $theme==''){ echo ' style="font-size:' . $font_smaller . '"'; } ?> align="right" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
  817.                 <?php echo PMA_localisedDate(strtotime($showtable['Create_time'])) . "\n"; ?>
  818.             </td>
  819.         </tr>
  820.                 <?php
  821.             }
  822.             echo "\n";
  823.  
  824.             if (isset($showtable['Update_time'])) {
  825.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  826.                 echo "\n";
  827.                 ?>
  828.         <tr>
  829.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strStatUpdateTime; ?></td>
  830.             <td<?php if($theme=='original' || $theme==''){ echo ' style="font-size:' . $font_smaller . '"'; } ?> align="right" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
  831.                 <?php echo PMA_localisedDate(strtotime($showtable['Update_time'])) . "\n"; ?>
  832.             </td>
  833.         </tr>
  834.                 <?php
  835.             }
  836.             echo "\n";
  837.  
  838.             if (isset($showtable['Check_time'])) {
  839.                 $bgcolor = ((++$i%2) ? $cfg['BgcolorTwo'] : $cfg['BgcolorOne']);
  840.                 echo "\n";
  841.                 ?>
  842.         <tr>
  843.             <td bgcolor="<?php echo $bgcolor; ?>"><?php echo $strStatCheckTime; ?></td>
  844.             <td<?php if($theme=='original' || $theme==''){ echo ' style="font-size:' . $font_smaller . '"'; } ?> align="right" bgcolor="<?php echo $bgcolor; ?>" nowrap="nowrap">
  845.                 <?php echo PMA_localisedDate(strtotime($showtable['Check_time'])) . "\n"; ?>
  846.             </td>
  847.         </tr>
  848.                 <?php
  849.             }
  850.             echo "\n";
  851.             ?>
  852.         </table>
  853.     </td>
  854.             <?php
  855.         }
  856.     }
  857.     // END - Calc Table Space
  858.     echo "\n";
  859.     ?>
  860. </tr>
  861. </table>
  862. <hr />
  863.     <?php
  864. } // end if (!$tbl_is_view)
  865.  
  866. /**
  867.  * Query box, bookmark, insert data from textfile
  868.  */
  869. $goto = 'tbl_properties_structure.php';
  870. require('./tbl_query_box.php');
  871.  
  872. /**
  873.  * Displays the footer
  874.  */
  875. require_once('./footer.inc.php');
  876. ?>
  877.